import numpy as np

class Activation:
    def __init__(self, activation_func, derivative_func):
        self.activation_func = activation_func
        self.derivative_func = derivative_func

    def activate(self, x):
        return self.activation_func(x)

    def derivative(self, x):
        return self.derivative_func(x)


SIGMOID = Activation(
    activation_func=lambda x: 1 / (1 + np.exp(-x)),
    derivative_func=lambda x: SIGMOID.activate(x) * (1 - SIGMOID.activate(x))
)

# Expose SIGMOID for external use
SIGMOID_ACTIVATION = SIGMOID
